import { ElLoading } from 'element-plus';

let loadingInstance = null;
let requestCount = 0; // 记录正在进行的请求数量
let timer = null; // 用于延迟显示加载的定时器
const DELAY_TIME = 300; // 延迟显示加载的时间（毫秒）
const MIN_DISPLAY_TIME = 500; // 加载效果最小显示时间（毫秒）
let startTime = 0; // 记录加载开始时间

function showLoading() {
  requestCount++;
  if (requestCount === 1) {
    // 只有当第一个请求开始时才启动定时器
    startTime = Date.now();
    timer = setTimeout(() => {
      loadingInstance = ElLoading.service({
        lock: true,
        background: 'rgba(0, 0, 0, 0.1)',
        fullscreen: false,
      });
    }, DELAY_TIME);
  }
}

function hideLoading() {
  requestCount--;
  if (requestCount === 0) {
    // 所有请求都已完成
    if (timer) {
      clearTimeout(timer); // 如果加载效果还没显示，就取消显示
      timer = null;
    }

    if (loadingInstance) {
      const elapsedTime = Date.now() - startTime;
      const remainingTime = MIN_DISPLAY_TIME - elapsedTime;

      if (remainingTime > 0) {
        // 如果显示时间不足最小显示时间，则等待剩余时间
        setTimeout(() => {
          loadingInstance?.close();
          loadingInstance = null;
        }, remainingTime);
      } else {
        // 否则直接关闭
        loadingInstance?.close();
        loadingInstance = null;
      }
    }
  }
}

export function useGlobalLoading() {
  return { showLoading, hideLoading };
}
